﻿#ifndef STRUCTS_H
#define STRUCTS_H

#include <QMap>
#include <QVector>
#include <QVariant>
#include "rnpack.h"

//枚举
struct EnumData
{
    QVariant enumId; //枚举id
    QString enumName; //枚举名
    QMap<int,QString> enumMap;  //包含键值对map《key（int），value（string）》
    RNPACK(EnumData,enumId,enumName,enumMap);
};
Q_DECLARE_METATYPE(EnumData);

//单位
struct UnitData
{
    QVariant unitId; //单位id
    QString unitValue; //单位值（km/h,m/s等）
    quint32 unitType; //单位类型 (速度单位，高度单位等)
    RNPACK(UnitData,unitId,unitValue,unitType);
};
Q_DECLARE_METATYPE(UnitData);

//信号信息
struct SignalData
{
    QVariant signalGuid;//信号唯一识别ID（自己设置）
    QString signalName;//信号名
    bool isSignalTheme;//是否为信号主题，信号主题会包含子信号
    quint32 offsetByte;//起始字
    quint32 offsetBit;//起始位
    quint32 bitLength;//位长
    /*
     * 0:INT8;1:INT16;2:INT32;3:INT64;
     * 4:UINT8;5:UINT16;6:UINT32;7:UINT64;
     * 8:FLOAT;9:DOUBLE;10:STRING;11:ENUM;
    */
    quint32 dataType;//数据类型(索引)
    float LSB;//数据精度 （如果为0不用计算）
    UnitData unit;//单位数据
    QVector<QVariant> childSignalVec;//子信号表
    RNPACK(SignalData,signalName,isSignalTheme,offsetByte,offsetBit,bitLength,dataType,LSB,signalGuid,unit,childSignalVec);
    ///*枚举直接从枚举表获取这里不添加相关变量*/
};
Q_DECLARE_METATYPE(SignalData);

//消息信息
struct MsgData
{
    QVariant msgId;//消息id （帧id）
    QString msgName;//消息名称
    QVariant mainKey;//消息key（主key）
    QVariant sourceId;//来源ID（飞机id）
    QVariant destId;//目的id（地面站id）
    quint32 msgDataLength;//消息数据长度（帧长度）
    QVector<QVariant> childrenSignalVec;//包含信号 vector《string（信号id）》
    RNPACK(MsgData,msgId,msgName,mainKey,sourceId,destId,msgDataLength,childrenSignalVec);
};
Q_DECLARE_METATYPE(MsgData);

//节点信息
struct NodeData
{
    QVariant nodeId;//节点id
    QString nodeName;//节点名字
    QVariant parentNodeId;//父节点id（用于找到父节点）
    RNPACK(NodeData,nodeId,nodeName,parentNodeId);
};
Q_DECLARE_METATYPE(NodeData);

#endif // STRUCTS_H
